home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 March / PCWorld_2001-03_cd.bin / Software / TemaCD / classbuild / ClassBuilder 2.2 PR405 Setup.exe / {app} / Include / CB_AvlTreeOwned.h < prev    next >
C/C++ Source or Header  |  2000-12-29  |  8KB  |  244 lines

  1. #ifndef CB_AVLTREE_OWNED_H
  2. #define CB_AVLTREE_OWNED_H
  3.  
  4. #include "CB_AvlTree.h"
  5.  
  6. // defines for include files
  7. #define RELATION_TEMPLATE_AVLTREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  8. private:\
  9.     ClassTo* _top##NameTo;\
  10.     int _count##NameTo;\
  11. \
  12. public:\
  13.     void Add##NameTo(ClassTo* item)\
  14.     {\
  15.         METHOD_AVLTREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  16.     }\
  17.     void Remove##NameTo(ClassTo* item)\
  18.     {\
  19.         METHOD_AVLTREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  20.     }\
  21.     void RemoveAll##NameTo()\
  22.     {\
  23.         METHOD_AVLTREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  24.     }\
  25.     void DeleteAll##NameTo()\
  26.     {\
  27.         METHOD_AVLTREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  28.     }\
  29.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  30.     {\
  31.         METHOD_AVLTREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  32.     }\
  33.     ClassTo* GetFirst##NameTo() const\
  34.     {\
  35.         METHOD_AVLTREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  36.     }\
  37.     ClassTo* GetLast##NameTo() const\
  38.     {\
  39.         METHOD_AVLTREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  40.     }\
  41.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  42.     {\
  43.         METHOD_AVLTREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  44.     }\
  45.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  46.     {\
  47.         METHOD_AVLTREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  48.     }\
  49.     int Get##NameTo##Count() const\
  50.     {\
  51.         METHOD_AVLTREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  52.     }\
  53.     ITERATOR_TEMPLATE_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  54.  
  55. #define RELATION_TEMPLATE_NOFILTER_AVLTREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  56. private:\
  57.     ClassTo* _top##NameTo;\
  58.     int _count##NameTo;\
  59. \
  60. public:\
  61.     void Add##NameTo(ClassTo* item)\
  62.     {\
  63.         METHOD_AVLTREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  64.     }\
  65.     void Remove##NameTo(ClassTo* item)\
  66.     {\
  67.         METHOD_AVLTREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  68.     }\
  69.     void RemoveAll##NameTo()\
  70.     {\
  71.         METHOD_AVLTREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  72.     }\
  73.     void DeleteAll##NameTo()\
  74.     {\
  75.         METHOD_AVLTREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  76.     }\
  77.     void Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  78.     {\
  79.         METHOD_AVLTREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  80.     }\
  81.     ClassTo* GetFirst##NameTo() const\
  82.     {\
  83.         METHOD_AVLTREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  84.     }\
  85.     ClassTo* GetLast##NameTo() const\
  86.     {\
  87.         METHOD_AVLTREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  88.     }\
  89.     ClassTo* GetNext##NameTo(ClassTo* pos) const\
  90.     {\
  91.         METHOD_AVLTREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  92.     }\
  93.     ClassTo* GetPrev##NameTo(ClassTo* pos) const\
  94.     {\
  95.         METHOD_AVLTREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  96.     }\
  97.     int Get##NameTo##Count() const\
  98.     {\
  99.         METHOD_AVLTREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  100.     }\
  101.     ITERATOR_TEMPLATE_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  102.  
  103. #define RELATION_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  104. private:\
  105.     ClassTo* _top##NameTo;\
  106.     int _count##NameTo;\
  107. \
  108. protected:\
  109. \
  110. public:\
  111.     void Add##NameTo(ClassTo* item);\
  112.     void Remove##NameTo(ClassTo* item);\
  113.     void DeleteAll##NameTo();\
  114.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  115.     ClassTo* GetFirst##NameTo() const;\
  116.     ClassTo* GetLast##NameTo() const;\
  117.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  118.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  119.     int Get##NameTo##Count() const;\
  120.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  121.  
  122. #define RELATION_NOFILTER_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  123. private:\
  124.     ClassTo* _top##NameTo;\
  125.     int _count##NameTo;\
  126. \
  127. protected:\
  128. \
  129. public:\
  130.     void Add##NameTo(ClassTo* item);\
  131.     void Remove##NameTo(ClassTo* item);\
  132.     void DeleteAll##NameTo();\
  133.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  134.     ClassTo* GetFirst##NameTo() const;\
  135.     ClassTo* GetLast##NameTo() const;\
  136.     ClassTo* GetNext##NameTo(ClassTo* pos) const;\
  137.     ClassTo* GetPrev##NameTo(ClassTo* pos) const;\
  138.     int Get##NameTo##Count() const;\
  139.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  140.  
  141. #define RELATION_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  142.     RELATION_AVLTREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  143.  
  144. // defines implementation
  145. #define INIT_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  146.    INIT_AVLTREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  147.  
  148. #define EXIT_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  149.     while (_top##NameTo)\
  150.     {\
  151.         delete _top##NameTo;\
  152.     }
  153.  
  154. #define REPLACE_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  155.     REPLACE_AVLTREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  156.  
  157. #define INIT_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  158.     _ref##NameFrom = (ClassFrom*)0;\
  159.     _parent##NameFrom = (ClassTo*)0;\
  160.     _left##NameFrom = (ClassTo*)0;\
  161.     _right##NameFrom = (ClassTo*)0;\
  162.     _bal##NameFrom = 0;\
  163.     assert(p##NameFrom);\
  164.     p##NameFrom->Add##NameTo(this);
  165.  
  166. #define EXIT_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  167.     EXIT_AVLTREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  168.  
  169. #define REPLACE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  170.     _ref##NameFrom = (ClassFrom*)0;\
  171.     _parent##NameFrom = (ClassTo*)0;\
  172.     _left##NameFrom = (ClassTo*)0;\
  173.     _right##NameFrom = (ClassTo*)0;\
  174.     _bal##NameFrom = 0;\
  175.     pOld->_ref##NameFrom->Replace##NameTo(pOld, this);
  176.  
  177. #define REMOVE_AVLTREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  178.     while (_top##NameTo)\
  179.     {\
  180.         (void)new UndoSubDelete(_top##NameTo);\
  181.     }
  182.  
  183. #define SAVE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  184.     SAVE_AVLTREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  185.  
  186. #define RESTORE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  187.     RESTORE_AVLTREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  188.  
  189. #define REMOVE_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  190.     REMOVE_AVLTREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  191.  
  192. #define CLEANUP_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  193.     CLEANUP_AVLTREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  194.  
  195. #define METHODS_AVLTREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  196. void ClassFrom##::Add##NameTo(ClassTo* item)\
  197. {\
  198.     METHOD_AVLTREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  199. }\
  200. \
  201. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  202. {\
  203.     METHOD_AVLTREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  204. }\
  205. \
  206. void ClassFrom##::DeleteAll##NameTo()\
  207. {\
  208.     METHOD_AVLTREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  209. }\
  210. \
  211. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  212. {\
  213.     METHOD_AVLTREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  214. }\
  215. \
  216. ClassTo* ClassFrom##::GetFirst##NameTo() const\
  217. {\
  218.     METHOD_AVLTREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  219. }\
  220. \
  221. ClassTo* ClassFrom##::GetLast##NameTo() const\
  222. {\
  223.     METHOD_AVLTREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  224. }\
  225. \
  226. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos) const\
  227. {\
  228.     METHOD_AVLTREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  229. }\
  230. \
  231. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos) const\
  232. {\
  233.     METHOD_AVLTREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  234. }\
  235. \
  236. int ClassFrom##::Get##NameTo##Count() const\
  237. {\
  238.     METHOD_AVLTREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  239. }
  240.  
  241. #define METHODS_AVLTREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  242.  
  243. #endif
  244.